﻿namespace ConsoleApp.观察者
{
    /// <summary>

    /// 牛奶配送员

    /// 根据牛奶站订牛奶列表配送牛奶 --> 通知观察者

    /// </summary>

    public class MilkCourier : IMilkStation
    {
        // 牛奶站剩余牛奶数量

        public int MilkCount { get; set; }

        // 所有订牛奶的用户 --> 需要被通知的观察者

        private List<IObserver> observerList = new List<IObserver>();

        public MilkCourier(int milkCount)
        {
            this.MilkCount = milkCount;
        }

        // 订牛奶方法 -- 添加观察者实现

        public void Attach(IObserver observer)
        {
            Console.WriteLine("牛奶站：收到一个用户订奶");

            this.observerList.Add(observer);
        }

        // 退订方法 --> 移除观察者实现

        public void Detach(IObserver observer)
        {
            this.observerList.Remove(observer);

            Console.WriteLine("牛奶站：收到一个用户退订");
        }

        // 在每个订阅者中触发更新。

        public void Distribution()
        {
            Console.WriteLine("牛奶站：牛奶配送中...");

            foreach (var observer in observerList)

            {
                observer.ReceiveMilk(this);
            }
        }

        public void SomeLogical()
        {
            if (MilkCount > observerList.Count)
            {
                Console.WriteLine("奶站剩余牛奶数量: " + this.MilkCount);

                this.MilkCount -= observerList.Count;

                this.Distribution();

                Console.WriteLine("此次配送后剩余数量: " + this.MilkCount);
            }
            else
            {
                Console.WriteLine("奶站剩余牛奶数量: " + this.MilkCount + "，不足以配送所有订阅用户；");
            }
        }
    }
}